package 剑指offer;

public class p15二进制中1的个数 {
    // you need to treat n as an unsigned value

    //方法一 逐位判断
    public int hammingWeight1(int n) {
        int count=0;
        while(n!=0) {
            if((n & 1) == 1) {
                // ==的优先级 高于 位运算符
                count++;
            }
            n=n>>>1;//n>>>=1
            //无符号右移位>>>，使用零扩展：无论正负，都在高位插入0
            //有符号右移位>>，使用符号扩展：若符号为正，则在高位插入0；若符号为负，则在高位插入1
        }
        return count;
    }

    //方法二 巧用 n&(n−1)
    public int hammingWeight(int n) {
        int count=0;
        while (n!=0) {
            n= n & (n-1);
            count++;
        }
        return count;
    }


}
